package com.kokomi.pojo;

import lombok.Getter;
import lombok.Setter;

/**
 * 通用返回结果类，用于封装接口返回数据
 * @param <T> 泛型，用于封装具体返回的数据类型
 */
@Setter
@Getter
public class Result<T>{

    // 返回的状态码：200成功； 500失败
    private Integer code;
    // 返回的提示内容
    private String msg;
    // 返回的数据
    private T obj;

    /**
     * 创建一个操作成功的Result对象，无返回数据
     * @return Result对象，包含成功状态码和默认的成功消息
     */
    public static <T> Result<T> ok() {
        return new Result<>(200,"操作成功!",null);
    }

    /**
     * 创建一个操作成功的Result对象，包含指定的返回数据
     * @param obj 返回的数据对象
     * @return Result对象，包含成功状态码、默认的成功消息和指定的数据
     */
    public static <T> Result<T> ok(T obj, String msg) {
        return new Result<>(200,msg,obj);
    }
    public static <T> Result<T> ok(T obj, String msg, Integer code) {
        return new Result<>(code,msg,obj);
    }


    /**
     * 创建一个操作失败的Result对象，无返回数据
     * @return Result对象，包含失败状态码和默认的失败消息
     */
    public static <T> Result<T> fail() {
        return new Result<>(500,"操作失败!",null);
    }

    /**
     * 创建一个操作失败的Result对象，包含指定的失败消息
     * @param msg 失败消息
     * @return Result对象，包含失败状态码、指定的失败消息和无数据
     */
    public static <T> Result<T> fail(String msg) {
        return new Result<>(500,msg,null);
    }

    // 默认构造函数
    public Result() {
    }

    /**
     * 构造函数，初始化Result对象
     * @param code 状态码
     * @param msg 提示消息
     * @param obj 返回的数据
     */
    public Result(Integer code, String msg, T obj) {
        this.code = code;
        this.msg = msg;
        this.obj = obj;
    }

}
